package com.xj.api.bussiness.UploadFile.web;

import com.xj.api.base.web.BaseController;
import com.xj.common.base.common.bean.AbstractBean;
import com.xj.common.base.common.util.ImageUploadUtil;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.MultipartConfigElement;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * <p>
 *     照片上传控制器
 * </p>
 *
 * @author zhaohai
 * @since 2018-01-12
 */
@Slf4j
@Configuration
@RestController
@RequestMapping("/upload")
public class UploadController extends BaseController {

    @PostMapping("/uploadImg")

    /**
     * 文件上传配置
     * @return
     */
    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //文件最大
        factory.setMaxFileSize("10MB"); //KB,MB
        /// 设置总上传数据总大小
        factory.setMaxRequestSize("10MB");
        return factory.createMultipartConfig();
    }

    @ApiOperation(value = "照片上传", httpMethod = "POST", notes = "照片上传")
    public AbstractBean uploadImg(HttpServletRequest request) throws Exception {
        String name = request.getAttribute("name")+"";
        System.out.println("------------------------------------------"+name);
        String pathType = request.getAttribute("pathType")+"";
        System.out.println("------------------------------------------"+pathType);
        String title = "/upload/img/"+pathType;
        Map<String,String> obj = ImageUploadUtil.upload(request,title);
        if(obj != null){
            return json(obj);
        }
//        //获取文件需要上传到的路径
//        String path = request.getRealPath("/upload") + "/";
//        File dir = new File(path);
//        if (!dir.exists()) {
//            dir.mkdir();
//        }
//        logger.debug("path=" + path);
//
//        //设置编码
//        request.setCharacterEncoding("utf-8");
//        //获得磁盘文件条目工厂
//        DiskFileItemFactory factory = new DiskFileItemFactory();
//
//        //如果没以下两行设置的话,上传大的文件会占用很多内存，
//        //设置暂时存放的存储室,这个存储室可以和最终存储文件的目录不同
//        /**
//         * 原理: 它是先存到暂时存储室，然后再真正写到对应目录的硬盘上，
//         * 按理来说当上传一个文件时，其实是上传了两份，第一个是以 .tem 格式的
//         * 然后再将其真正写到对应目录的硬盘上
//         */
//        factory.setRepository(dir);
//        //设置缓存的大小，当上传文件的容量超过该缓存时，直接放到暂时存储室
//        factory.setSizeThreshold(1024 * 1024);
//        //高水平的API文件上传处理
//        ServletFileUpload upload = new ServletFileUpload(factory);
//
//        try {
//            List<FileItem> list = upload.parseRequest(request);
//            logger.info("list:{}", list.size());
//            FileItem picture = null;
//            for (FileItem item : list) {
//                //获取表单的属性名字
//                String name = item.getFieldName();
//                logger.info("fieldName:{}", name);
//                //如果获取的表单信息是普通的 文本 信息
//                if (item.isFormField()) {
//                    //获取用户具体输入的字符串
//                    String value = item.getString();
//                    request.setAttribute(name, value);
//                    logger.debug("name=" + name + ",value=" + value);
//                } else {
//                    picture = item;
//                }
//            }
//
//            //自定义上传图片的名字为userId.jpg
//            //微信小程序上传的图片文件名都是wx-file.jpg，这里取了从前端传过来的userId为文件命名。
//            //userId需要放在wx.uploadFile的formData中。
//            String fileName = request.getAttribute("userId") + ".jpg";
//            String destPath = path + fileName;
//            logger.debug("destPath=" + destPath);
//            //真正写到磁盘上
//            File file = new File(destPath);
//            OutputStream out = new FileOutputStream(file);
//            InputStream in = picture.getInputStream();
//            int length = 0;
//            byte[] buf = new byte[1024];
//            // in.read(buf) 每次读到的数据存放在buf 数组中
//            while ((length = in.read(buf)) != -1) {
//                //在buf数组中取出数据写到（输出流）磁盘上
//                out.write(buf, 0, length);
//            }
//            in.close();
//            out.close();
//        } catch (FileUploadException e1) {
//            logger.error("", e1);
//        } catch (Exception e) {
//            logger.error("", e);
//        }
        return error();
    }

    @PostMapping("/uploadImgTest")
    @ApiOperation(value = "照片、视频上传", httpMethod = "POST", notes = "照片、视频上传")
    public AbstractBean uploadImgTest(MultipartHttpServletRequest multiReq,String imagesType) throws Exception{
        String obj = ImageUploadUtil.uploadImg(imagesType,multiReq);
        if(obj != null){
            return json(obj);
        }
        return error();
    }
}
